
    Function.implement.preventOverride= true;
    Function.implement
    (
        {
            /**
             * Determine if an object declares all of the public methods
             * declared on this constructors protoype, or in other words,
             * implements the same interface as this constructors prototype.
             * 
             * @param {Object} subject    Any value.
             * @return {Boolean}
             */            
            like: function (subject) 
            {
                if (null == subject)
                    return false;
                    
                var prototype= this.prototype
                ,   accessor;
                
                for (accessor in prototype) 
                {
                    if('function' === typeof prototype[accessor]
                    && 'constructor' !== accessor
                    && '_' !== accessor.charAt(0)
                    && 'function' !== typeof subject[accessor])
                        return false;
                };
                
                return true;
            }
            
            /**
             * Determine if a constructor is a superconstructor of this constructor
             * 
             * @param {Function} Constructor
             * @return {Boolean}
             */
        ,   isSubclassOf: function (Constructor) 
            {
                if ('function' === typeof Constructor)
                    return Constructor.prototype.isPrototypeOf(this.prototype);
                    
                return false;
            }
            
            /**
             * Determine if this constructor is a superconstructor of another.
             * 
             * @param {Function} Constructor
             * @return {Boolean}
             */
        ,   isSuperclassOf: function (Constructor) 
            {
                if ('function' === typeof Constructor)
                    return this.prototype.isPrototypeOf(Constructor.prototype);
                    
                return false;
            }
        }
    );
